package cn.edu.gdmec.android.criminalintent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

import static cn.edu.gdmec.android.criminalintent.R.id.parent;

public class CrimeListFragment extends Fragment {
    private static final String SAVED_SUBTITLE_VISIBLE = "subtitle";
    private RecyclerView mCrimeRecyclerView;
    private CrimeAdapter mAdapter;
    private boolean mSubtitleVisible;
    //添加回调接口
    private Callbacks mCallbacks;
    public interface Callbacks{
        void onCrimeSelected(Crime crime);

        //293
        void onCrimeUpdated(Crime crime);
    }
    @Override
    public void onAttach(Activity activity){
        super.onAttach ( activity );
        mCallbacks = (Callbacks) activity;
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate ( savedInstanceState );
        setHasOptionsMenu ( true );
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        View view = inflater.inflate ( R.layout.fragment_crime_list, container, false );

        mCrimeRecyclerView = (RecyclerView) view
                .findViewById ( R.id.crime_recycler_view );
        mCrimeRecyclerView.setLayoutManager ( new LinearLayoutManager ( getActivity () ) );

        if (savedInstanceState != null){
            mSubtitleVisible = savedInstanceState.getBoolean ( SAVED_SUBTITLE_VISIBLE );
        }
        updateUI();
        return view;
    }

    @Override
    public void onResume(){
        super.onResume ();
        updateUI ();
    }
    @Override
    public void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState ( outState );
        outState.putBoolean ( SAVED_SUBTITLE_VISIBLE, mSubtitleVisible );
    }
    @Override
    public void onDetach(){
        super.onDetach ();
        mCallbacks = null;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
        super.onCreateOptionsMenu ( menu, inflater );
        inflater.inflate ( R.menu.fragment_crime_list, menu );

        MenuItem subtitleItem = menu.findItem ( R.id.menu_item_show_subtitle );
        if (mSubtitleVisible){
            subtitleItem.setTitle ( R.string.hide_subtitle );
        }else{
            subtitleItem.setTitle ( R.string.show_subtitle );
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId ()){
            case R.id.menu_item_new_crime:
                Crime crime = new Crime ();
                CrimeLab.get ( getActivity () ).addCrime ( crime );

                /*Intent intent = CrimePagerActivity
                        .newIntent ( getActivity (), crime.getId () );
                startActivity ( intent );*/
                updateUI ();
                mCallbacks.onCrimeSelected ( crime );
                return true;
            case R.id.menu_item_show_subtitle:
                mSubtitleVisible = !mSubtitleVisible;
                getActivity ().invalidateOptionsMenu ();
                updateSubtitle ();
                return true;
            default:
                return super.onOptionsItemSelected ( item );
        }
    }

    private void updateSubtitle(){
        CrimeLab crimeLab = CrimeLab.get ( getActivity () );
        int crimeCount = crimeLab.getCrimes ().size ();
        String subtitle = getString ( R.string.subtitle_format, crimeCount );

        if (!mSubtitleVisible){
            subtitle =  null;
        }

        AppCompatActivity activity = (AppCompatActivity) getActivity ();
        activity.getSupportActionBar ().setSubtitle ( subtitle );
    }

    public void updateUI() {
        CrimeLab crimeLab = CrimeLab.get ( getActivity () );
        List<Crime> crimes = crimeLab.getCrimes ();

        if (mAdapter == null){
            mAdapter = new CrimeAdapter ( crimes );
            mCrimeRecyclerView.setAdapter ( mAdapter );
        }else {
            //247
            mAdapter.setCrimes ( crimes );
            mAdapter.notifyDataSetChanged ();
        }
        updateSubtitle ();

    }

    private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private Crime mCrime;
        private TextView mTitleTextView;
        private TextView mDataTextView;
        private CheckBox mSolvedCheckBox;

        public CrimeHolder(View itemView){
            super(itemView);
            itemView.setOnClickListener ( this );
            mTitleTextView = (TextView)
                    itemView.findViewById ( R.id.list_item_crime_title_text_view);
            mDataTextView = (TextView)
                    itemView.findViewById ( R.id.list_item_crime_date_text_view );
            mSolvedCheckBox = (CheckBox)
                    itemView.findViewById ( R.id.list_item_crime_solved_check_box );
        }
        public void bindCrime(Crime crime){
            mCrime = crime;
            mTitleTextView.setText ( mCrime.getTitle () );
            mDataTextView.setText ( mCrime.getDate ().toString () );
            mSolvedCheckBox.setChecked ( mCrime.isSolved () );
        }
        @Override
        public void onClick(View v){
//            Toast.makeText ( getActivity (),
//                    mCrime.getTitle () + " clicked!", Toast.LENGTH_SHORT)
//                    .show ();
            //Intent intent = new Intent ( getActivity (), CrimeActivity.class );
            //Intent intent = CrimeActivity.newIntent ( getActivity (), mCrime.getId () );
           /* Intent intent = CrimePagerActivity.newIntent ( getActivity (), mCrime.getId () );
            startActivity ( intent );*/
           mCallbacks.onCrimeSelected ( mCrime );
        }
    }



    private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder>{
        private List<Crime> mCrimes;
        public CrimeAdapter(List<Crime> crimes){
            mCrimes = crimes;
        }
        @Override
        public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType){
            LayoutInflater layoutInflater = LayoutInflater.from ( getActivity () );
            View view = layoutInflater
                    .inflate ( R.layout.list_item_crime, parent, false );
            return new CrimeHolder ( view );
        }
        @Override
        public void onBindViewHolder(CrimeHolder holder, int position){
            Crime crime = mCrimes.get ( position );
            //holder.mTitleTextView.setText ( crime.getTitle () );
            holder.bindCrime ( crime );
        }
        @Override
        public int getItemCount(){
            return mCrimes.size ();
        }
        public void setCrimes(List<Crime> crimes){
            mCrimes = crimes;
        }
    }

}
